import { Injectable, Logger, OnModuleInit } from "@nestjs/common";
import { RsaKeyPairPropName, getRsaKeyPairB64 } from "st-common-encrypt";

/**
 * 通用 RSA 公钥私钥对
 *
 * @type {{[RsaKeyPairPropName.PRI_KEY]: string, [RsaKeyPairPropName.PUB_KEY]: string}}
 */
export const rsaCommonKeyPair = {
  [RsaKeyPairPropName.PUB_KEY]: '',
  [RsaKeyPairPropName.PRI_KEY]: ''
};

@Injectable()
export class RsaService implements OnModuleInit {

  private readonly logger = new Logger(RsaService.name);

  /**
   * 通用 RSA 公钥私钥对
   * @type {{[RsaKeyPairPropNameEnum.PUB_KEY]: string, [RsaKeyPairPropNameEnum.PRI_KEY]: string}}
   * @private
   */
  private rsaCommonKeyPair: {
    [RsaKeyPairPropName.PUB_KEY]: string;
    [RsaKeyPairPropName.PRI_KEY]: string
  };

  constructor() {
  }

  onModuleInit() {
    this.logger.log('通用 RSA 公钥私钥对生成中...');
    // 生成通用 RSA 公钥私钥对
    this.rsaCommonKeyPair = getRsaKeyPairB64();
    rsaCommonKeyPair[RsaKeyPairPropName.PUB_KEY] = this.rsaCommonKeyPair[RsaKeyPairPropName.PUB_KEY];
    rsaCommonKeyPair[RsaKeyPairPropName.PRI_KEY] = this.rsaCommonKeyPair[RsaKeyPairPropName.PRI_KEY];
    this.logger.log('通用 RSA 公钥私钥对生成完成！');
  }

  /**
   * 获取 RSA 通用公钥
   *
   * @returns {string} RSA 通用公钥
   */
  getRsaCommonPubKey(): string {
    return this.rsaCommonKeyPair[RsaKeyPairPropName.PUB_KEY];
  }

}
